package com.om.deadlock;

public class Fork {
    private boolean isGrabbed = false;

    public void grab() {
        safelyGrab();
    }

    public synchronized void safelyGrab() {
        while (isGrabbed) {
            waitForNotification();
        }
        isGrabbed = true;
    }

    private void waitForNotification() {
        try {
            wait();
        } catch (InterruptedException e) {
        }
    }

    public synchronized void drop() {
        isGrabbed = false;
        notifyAll();
    }
}
